class Solution {
    public:
        //操作函数指针
        using func = int(*)(int, int);
        //操作函数
        static int add(int x, int y) { return x + y;}
        static int sub(int x, int y) { return x - y;}
        static int mul(int x, int y) { return x * y;}
        static int div(int x, int y) { return (int)(x / y);}
    
        int evalRPN(vector<string>& tokens) {
            stack<int> st;
            //包含的运算符，以及操作方式
            unordered_map<string, func> mp = {
                {"+", add}, {"-", sub}, {"*", mul}, {"/", div}
            };
    
    
            for(int i = 0; i < tokens.size(); i++)
            {
                //如果是操作符的话，就进行操作
                if(mp.count(tokens[i]))
                {
                    //取出数据
                    int y = st.top();
                    st.pop();
                    int x = st.top();
                    st.pop();
                    //操作
                    int ret = mp[tokens[i]](x, y);
                    //放回栈中
                    st.push(ret);
                }
                //如果是数字的话，入栈
                else
                {
                    st.push(std::stoi(tokens[i]));
                }
            }
            return st.top();
        }
    };